home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / bmgrep.arc / GETPATF.C < prev    next >
Text File  |  1986-12-10  |  1KB  |  49 lines

  1. #include <stdio.h>
  2. #include <stat.h>
  3. #include "bm.h"
  4.  
  5. int GetPatFile(PatFile, DescVec)
  6. char *PatFile;
  7. struct PattDesc *DescVec[];
  8. /* read patterns from a file and set up a pattern descriptor vector */
  9. {
  10.     extern char *malloc();
  11.     FILE *PFile;
  12.     struct stat StatBuff;
  13.     int PatSize; /* the number of chars in all the patterns */
  14.     char *PatBuff; /* hold the patterns */
  15.     if (!(strlen(PatFile))) {
  16.         fprintf(stderr,"bm: no pattern file given\n");
  17.         exit(2);
  18.     } /* if */
  19.     if (!(PFile = fopen(PatFile,"r"))) {
  20.         fprintf(stderr,"bm: can't open pattern file %s\n",PatFile);
  21.         exit(2);
  22.     } /* if */
  23.     /* find out how big the patterns are */
  24.     if (stat(fileno(PFile),&StatBuff) == -1) {
  25.         fprintf(stderr,"bm: can't fstat %s\n",PatFile);
  26.         exit(2);
  27.     } /* if */
  28.     if (isatty(fileno(PFile)))
  29.         PatSize = PSIZEDEF;
  30.     else PatSize = StatBuff.st_size;
  31.     if (!PatSize) {
  32.         fprintf(stderr,"bm: pattern file is empty\n");
  33.         exit(2);
  34.     } /* if */
  35.     if (!(PatBuff = malloc(PatSize+1))) {
  36.            fprintf(stderr,"bm: insufficient memory to store patterns\n");
  37.         exit(2);
  38.     } /* if */
  39.     fread(PatBuff,1,PatSize,PFile); /* get the patterns */
  40.     /* make sure the patterns are null-terminated. We can't have
  41.     * nulls in the patterns */
  42.     if (PatBuff[PatSize-1] == '\n')
  43.         PatBuff[PatSize-1] = '\0';
  44.     else
  45.         PatBuff[PatSize] = '\0';
  46.     fclose(PFile);
  47.     return(MkDescVec(DescVec,PatBuff));
  48. } /* GetPatFile */
  49.